import {
  checkSystemUpdate,
  getAppPaddingBottom,
  saveDataToLocalStorage
} from "./utils/system.js"
import {
  wxLogin,
  newAuthUser,
  reqGetLastTenantId
} from './api/login'
import tracker from './utils/frontjs.mp.min.js'
// 初始化frontJS埋点服务
// 上报应用中的异常、网络请求、日志信息
// 上报自定义信息
tracker({
  token: "8e639c783638e1254dea40f80f24ed8a",
  behaviour: 5,
  captureConsoleLog: true
})

App({
  onLaunch(options) {
    checkSystemUpdate();
    // 获取应用底部安全举例
    this.globalData.app.paddingBottom = getAppPaddingBottom();
    // 处理进入应用携带的参数 tenantId(必传)、shareId(必传)、productId
    this.handleEnterOptions(options);
  },
  globalData: {
    tenantId: '33',
    app: {
      paddingBottom: 0,
    },
  },
  async Login() {
    console.log('开始静默登录')
    try {
      wx.showLoading('登录中...')
      // 如果缓存中的店铺Id是默认店铺Id则优先从服务端获取最近一次的店铺Id
      // 如果服务端没有则用默认的33
      const storageTenantId = wx.getStorageSync('tenantId');
      if (storageTenantId === '33') {
        try {
          const {
            code
          } = await wxLogin();
          const rawData = await reqGetLastTenantId(code);
          if (rawData?.data?.end_tenant_id) {
            console.log('最近一次访问的店铺Id:', rawData.data.end_tenant_id);
            this.globalData.tenantId = rawData.data.end_tenant_id;
            wx.setStorageSync('tenantId', rawData.data.end_tenant_id);
          }
        } catch (err) {
          console.log(err);
        }
      }

      const {
        code
      } = await wxLogin();
      const loginParams = {
        code
      }
      wx.removeStorageSync('token')
      let res = await newAuthUser(loginParams)
      wx.hideLoading()
      console.log(res)
      const authInfo = res.data
      if (authInfo && authInfo.token) {
        saveDataToLocalStorage({
          user: authInfo.user,
          avatar: authInfo.user.avatar,
          name: authInfo.user.realName,
          token: authInfo.token,
        })
      } else {
        //报错
        wx.showToast({
          title: '登录失败-res',
          icon: 'none'
        })
      }
      return authInfo
    } catch (error) {
      console.log(error)
      wx.showToast({
        title: '登录失败-catch',
        icon: 'none'
      })
    }
  },
  observe(obj, key, watch) {
    let val = obj[key];
    Object.defineProperty(obj, key, {
      configurable: true,
      enumerable: true,
      set: function (value) {
        val = value;
        watch(val, value);
      },
      get: function () {
        return val;
      },
    });
  },
  handleEnterOptions(options) {
    const queryTenantId = options?.query?.tenantId ?? options?.query?.scene ?? '33';
    const storageTenantId = wx.getStorageSync('tenantId')
    if (queryTenantId) {
      // 携参进入小程序
      const queryShareId = options?.query?.shareId
      this.globalData.tenantId = queryTenantId
      wx.setStorageSync('tenantId', queryTenantId)
      wx.setStorageSync('shareId', queryShareId)
      // 如果参数tenantId和缓存中的tenantId不一样 需要让用户重新登录
      // 因为授权登录接口需要携带最新的tenantId
      if (queryTenantId !== storageTenantId) {
        // 清除token后在调用任意一个接口时会触发“401->授权登录”
        wx.removeStorageSync('token')
      }
    } else if (storageTenantId) {
      // 直接进入小程序，缓存中已有tenantId的情况
      this.globalData.tenantId = storageTenantId
    } else {
      // 直接进入小程序 缓存中没有tenantId的情况
      // 默认店铺id=33存入storage
      wx.setStorageSync('tenantId', this.globalData.tenantId)
    }
  },
})